package com.sxhuayuan.parking.service;

import com.sxhuayuan.parking.compenent.Page;
import com.sxhuayuan.parking.compenent.Pageable;
import com.sxhuayuan.parking.entity.Agent;
import com.sxhuayuan.parking.entity.Salesman;

import java.util.List;

public interface AgentService extends BaseService<Agent, Long> {

	Page<Agent> findPage(Pageable pageable, Agent parent);

	void save(Agent agent, Agent parent);

	/**
	 * 判断用户名是否存在
	 * 
	 * @param username
	 *            用户名(忽略大小写)
	 * @return 用户名是否存在
	 */
	boolean usernameExists(String username);

	/**
	 * 根据用户名查找管理员
	 * 
	 * @param username
	 *            用户名(忽略大小写)
	 * @return 管理员，若不存在则返回null
	 */
	Agent findByUsername(String username);

	/**
	 * 根据ID查找权限
	 * 
	 * @param id
	 *            ID
	 * @return 权限,若不存在则返回null
	 */
	List<String> findAuthorities(Long id);

	/**
	 * 判断管理员是否登录
	 * 
	 * @return 管理员是否登录
	 */
	boolean isAuthenticated();

	/**
	 * 获取当前登录管理员
	 * 
	 * @return 当前登录管理员,若不存在则返回null
	 */
	Agent getCurrent();

	String getCurrentName();

	/**
	 * 判断是否有父子关系，即查看权限
	 * 
	 * @param parent
	 * @param child
	 * @return
	 */
	boolean isPermission(Agent parent, Agent child);

	/**
	 * 判断当前用户和目标用户是否存在父子关系
	 * 
	 * @param child
	 * @return
	 */
	boolean isPermission(Agent child);

	/**
	 * 查询当前管理员的所有子代理
	 * 
	 * @param parent
	 *            当前登录的管理员
	 * @return 子代理列表
	 */
	List<Agent> getChildrenList(Agent parent);

	/**
	 * 查询所有代理
	 * 
	 * @return
	 */
	Long countAll(Agent agent);

	/** 根据业务员获取业务员下所有代理 */
    List<Agent> findBySalesman(Salesman salesman);

    /** 根据业务员分页查询代理 */
	Page<Agent> findPage(Pageable pageable, Salesman salesman);
}
